#pragma once

#include <vector>
#include <list>
using std::vector;
using std::list;

namespace my_stack
{
    // Container：适配器
    template <class T, class Container = list<T>>
    class stack
    {
    public:
        bool empty()
        {
            return _st.empty();
        }
        // 链表头部是 栈的底部
        void pop()
        {
            _st.pop_back();
        }
        void push(const T& val)
        {
            _st.push_back(val);
        }
        T& top()
        {
            return _st.back();
        }
        size_t size()
        {
            return _st.size();
        }
    private:
        Container _st;
    };
}
